const expect = require('chai').expect

const SearchEngine = require('../classes/SearchEngine')

describe('SearchEngine', () => {
  const se = new SearchEngine()

  it('Deve obter o primeiro hotel de uma lista de hoteis', () => {
    const orcamentos = [
      { name: 'Hotel 1', rating: 4, budget: 890 },
      { name: 'Hotel 2', rating: 2, budget: 1370 },
      { name: 'Hotel 3', rating: 4, budget: 50 },
      { name: 'Hotel 4', rating: 5, budget: 50 }
    ]

    const hotel = se.getFirstHotel(orcamentos)
    expect(hotel.name).to.equal('Hotel 1')
  })

  it('Deve encontrar o hotel em função do melhor orçamento', () => {
    const orcamentos = [
      { name: 'Hotel 1', rating: 4, budget: 890 },
      { name: 'Hotel 2', rating: 2, budget: 1370 },
      { name: 'Hotel 3', rating: 4, budget: 50 },
      { name: 'Hotel 4', rating: 5, budget: 50 }
    ]

    const hotel = se.findCheaperHotel(orcamentos)
    expect(hotel.budget).to.equal(50)
  })

  it('Deve selecionar o hotel com maior rating quando o orçamento for igual', () => {
    const orcamentos = [
      { name: 'Hotel 1', rating: 4, budget: 890 },
      { name: 'Hotel 2', rating: 2, budget: 1370 },
      { name: 'Hotel 3', rating: 4, budget: 50 },
      { name: 'Hotel 4', rating: 5, budget: 50 }
    ]
    
    const hotel = se.findCheaperHotel(orcamentos)
    expect(hotel.name).to.equal('Hotel 4')
  })

  it('Deve ordenar os orçamentos por menor preço e maior qualidade', () => {
    const orcamentos = [
      { name: 'Hotel 1', rating: 4, budget: 890 },
      { name: 'Hotel 2', rating: 2, budget: 1370 },
      { name: 'Hotel 3', rating: 4, budget: 50 },
      { name: 'Hotel 4', rating: 5, budget: 50 }
    ]

    const hotel = se.sortByBudget(orcamentos)
    expect(hotel[0].name).to.equal('Hotel 4')
  })
})
